启用EOF
自动分包。当设置open_eof_check
后,底层检测数据是否以特定的字符串结尾来进行数据缓冲。但默认只截取收到数据的末尾部分做对比。这时候可能会产生多条数据合并在一个包内。
EOF
切割需要遍历整个数据包的内容,查找EOF
,因此会消耗大量CPU
资源。假设每个数据包为2M
,每秒10000
个请求,这可能会产生20G
条CPU
字符匹配指令。
- 布尔型,必须为
true
或false
,传入其他类型数值会被强制转为布尔型
启用open_eof_split
参数后,底层会从数据包中间查找EOF
,并拆分数据包。onReceive
每次仅收到一个以EOF
字串结尾的数据包。
启用open_eof_split
参数后,无论参数open_eof_check
是否设置,open_eof_split
都将生效。
open_eof_check
只检查接收数据的末尾是否为EOF
,因此它的性能最好,几乎没有消耗open_eof_check
无法解决多个数据包合并的问题,比如同时发送两条带有EOF
的数据,底层可能会一次全部返回open_eof_split
会从左到右对数据进行逐字节对比,查找数据中的EOF
进行分包,性能较差。但是每次只会返回一个数据包
array(
'open_eof_split' => true, //打开EOF_SPLIT检测
'package_eof' => "\r\n", //设置EOF
)